import { setToken, getToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserInfo, getUserDataById } from '@/api/user'
import { resetRouter } from '@/router'
// 避免代码耦合性
const state = {
  token: getToken() || null, // 设置token为共享状态
  UserInfo: {}
}
const mutations = {

  // 用户登录
  setToken(state, played) {
    // 设置token 设置本地token
    state.token = played
    setToken(played)
  },

  removeToken(state) {
    // 置空token 删除本地token
    state.token = null
    removeToken()
  },

  // 更新用户信息
  setUserInfo(state, played) {
    state.UserInfo = played
  },
  removeUserInfo(state) {
    state.UserInfo = {}
  }
}
const actions = {
  // 用户登录
  async login(context, data) {
    const result = await login(data) // 拿到token

    console.log('打印登录返回对象', result)
    context.commit('setToken', result) // 设置token

    setTimeStamp() // 存入时间戳
  },

  // 获取用户信息
  async getUserInfo(context) {
    const result = await getUserInfo()

    // 获取用户详情 头像
    const baseInfo = await getUserDataById(result.userId)

    // 合并数据
    const baseResult = { ...result, ...baseInfo }

    // 将用户信息存入仓库
    context.commit('setUserInfo', baseResult)
    return result // 为权限的判定  留下伏笔
  },

  // 退出登录
  lgout(ctx) {
    // 删除token(vuex和本地) 清空用户资料
    ctx.commit('removeToken')
    ctx.commit('removeUserInfo')
    // 重置路由
    resetRouter()
    // { root: true } 调用根级的mutations或者actions。
    ctx.commit('permission/setRoutes', [], { root: true })
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
